package main

import "fmt"

//演示管道的简单使用
func main() {
	//一个可以存放3个int类型的管道
	var intChan chan int
	//2 管道需要make后使用
	intChan = make(chan int, 3)
	fmt.Printf("intchan的值:%v intchan的地址:%v", intChan, &intChan)

	//3.在不使用goroutine的情况下，管道不可以存放超过容量的信息,否者发生死锁
	intChan <- 1
	num := 10
	intChan <- num
	intChan <- 100
	//intChan<-200//error: all goroutines are asleep - deadlock

	<-intChan //先从管道里取出一笔后，才能继续放
	intChan <- 200
	<-intChan
	//打印一下当前管道的容量和实际大小
	fmt.Printf("管道的len:%v 管道的容量:%v \n", len(intChan), cap(intChan))
	outNum := <-intChan // 取出的是100
	fmt.Printf("从管道获取的数据:%v \n", outNum)
	//在不适用goroutine的情况下，管道中不再包含数据的时候，继续取数据会发生死锁
	<-intChan
	//<-intChan //fatal error: all goroutines are asleep - deadlock!

	//make管道的时候，如果不指定容量,在容量就是0，无法存东西
	testChan := make(chan int)
	fmt.Printf("len:%v cap:%v", len(testChan), cap(testChan))
}
